home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- organization: gisle@ifi.uio.no
- subject: v09i096: PEP filter program [ part 5 of 5 ]
- from: gisle@ifi.uio.no (Gisle Hannemyr)
- Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
-
- Posting-number: Volume 9, Issue 96
- Submitted-by: gisle@ifi.uio.no (Gisle Hannemyr)
- Archive-name: pep/part05
-
- # This is a shell archive [ part 5 of 5 ]
- # Remove everything above and including the cut line.
- # Then run the rest of the file through /bin/sh (not csh).
- #--cut here-----cut here-----cut here-----cut here-----cut here-----cut here--#
- #!/bin/sh
- # shar: Shell Archiver
- # Execute the following text with /bin/sh to create the file(s):
- # bdmg.c
- # plain.c
- # pep.h
- # bdmg.h
- # This archive created: Fri Dec 29 14:42:46 1989
- # Wrapped by: Gisle Hannemyr (gisle@ifi.uio.no)
- echo shar: extracting bdmg.c
- sed 's/^XX//' << \SHAR_EOF > bdmg.c
- XX/* bdmg.c 1989 june 4 [gh]
- XX+-----------------------------------------------------------------------------
- XX| Abstract:
- XX| Functions that compensate some of the braindamage in various DUCOS.
- XX|
- XX| Authorship:
- XX| Copyright (c) 1988, 1989 Gisle Hannemyr.
- XX| Permission is granted to hack, make and distribute copies of this module
- XX| as long as this notice and the copyright notices are not removed.
- XX| If you intend to distribute changed versions of this module, please make
- XX| an entry in the "history" log (below) and mark the hacked lines with your
- XX| initials. I maintain the module, and shall appreiciate copies of bug
- XX| fixes and new versions.
- XX| Flames, bug reports, comments and improvements to:
- XX| snail: Gisle Hannemyr, Brageveien 3A, 0452 Oslo, Norway
- XX| email: X400: gisle@nr.uninett
- XX| RFC: gisle@ifi.uio.no
- XX| (and several BBS mailboxes in the Oslo area).
- XX|
- XX| Access programs:
- XX| int stricmp() -- case insenitive compare
- XX| int rename() -- rename file
- XX| struct DIRLIST *expwildcard() -- ersatz shell wildcard expansion
- XX| void dispwildcard() -- dispose list created by expwildcard
- XX|
- XX| History:
- XX| 11 dec 89 [gh] Latest update.
- XX|
- XX| See main module for more comments.
- XX+---------------------------------------------------------------------------*/
- XX
- XX#include <stdio.h>
- XX#include "pep.h"
- XX#include "bdmg.h"
- XX#include <string.h>
- XX#if __CPM86__ || __MSDOS__
- XX#include <dos.h>
- XX#endif
- XX
- XX/*---( types )--------------------------------------------------------------*/
- XX
- XX#ifdef __CPM86__
- XXstruct DTA {
- XX unsigned char f_driv;
- XX unsigned char f_name[8];
- XX unsigned char f_type[3];
- XX unsigned char f_dumm[20];
- XX}; /* DTA */
- XX#endif
- XX
- XX
- XX#ifdef __MSDOS__
- XXstruct DTA {
- XX char bogus[21];
- XX char attri;
- XX int ftime;
- XX int fdate;
- XX int fsize[2];
- XX char fname[64];
- XX}; /* DTA */
- XX#endif
- XX
- XX
- XX/*---( braindamage compensation )-------------------------------------------*/
- XX
- XX#ifdef STRICMP
- XXint stricmp(ss,tt)
- XXchar *ss,*tt;
- XX{
- XX while (*ss && (tolower(*ss) == tolower(*tt))) { ss++; tt++; }
- XX return(tolower(*ss) - tolower(*tt));
- XX} /* stricmp */
- XX#endif
- XX
- XX
- XX#ifdef SYSV2
- XXint rename(from,to)
- XXchar *from,*to;
- XX{
- XX (void)unlink(to);
- XX if (link(from,to)) return(-1);
- XX return(unlink(from));
- XX} /* rename */
- XX#endif
- XX
- XX
- XX#ifdef VMSV1
- XXint rename(from, to)
- XXchar *from, *to;
- XX{
- XX struct dsc$descriptor_s From={strlen(from),
- XX DSC$K_DTYPE_T,DSC$K_CLASS_S,from};
- XX struct dsc$descriptor_s To={strlen(to),
- XX DSC$K_DTYPE_T,DSC$K_CLASS_S,to};
- XX
- XX if (LIB$RENAME_FILE(&From, &To) == SS$_NORMAL) return(0);
- XX return(-1);
- XX} /* rename */
- XX#endif
- XX
- XX
- XX#if __CPM86__ || __MSDOS__
- XX#ifdef __CPM86__
- XX/*
- XX| Abs: Pack user number and fcb structure into string.
- XX| Ret: String with filename that was in fcb.
- XX| Imp: System dependent: CP/M-86, C-DOS 3.20
- XX*/
- XXstatic char *fcb2str(buf,lfcb,usr)
- XXchar *buf;
- XXstruct fcb *lfcb;
- XXint usr;
- XX{
- XX char *cp;
- XX int i;
- XX
- XX cp=buf;
- XX if (usr!=255) {
- XX if (usr>9) *buf++=((usr/10)%10)+'0';
- XX *buf++=(usr%10)+'0';
- XX *buf++='/';
- XX }
- XX if (lfcb->f_driv) {
- XX *buf++=lfcb->f_driv+'a'-1;
- XX *buf++=':';
- XX }
- XX for (i=0; i<8 && lfcb->f_name[i]!=' '; ++i)
- XX *buf++=tolower(lfcb->f_name[i]&0x7f); *buf++='.';
- XX for (i=0; i<3 && lfcb->f_type[i]!=' '; ++i)
- XX *buf++=tolower(lfcb->f_type[i]&0x7f); *buf=0;
- XX return(cp);
- XX} /* fcb2str */
- XX
- XX
- XX/*
- XX| Abs: Return list of malloc'ed filenames matching ambigious input list.
- XX| Ret: Pointer to alloced list, or 0 if none found.
- XX| Imp: System dependent: CP/M-86, C-DOS 3.20
- XX*/
- XXstruct DIRLIST *expwildcard(ambig)
- XXchar **ambig;
- XX{
- XX struct DIRLIST *first, *last, *prev;
- XX int pos;
- XX char *n;
- XX int user;
- XX struct DTA dma[4]; /* 4 CP/M directory entries */
- XX struct DTA fcb; /* Working FCB */
- XX
- XX setmem(&fcb,sizeof(struct DTA),0); /* Initialize FCB */
- XX bdos(SETDTA,dma);
- XX
- XX first = NULL;
- XX while (*ambig) {
- XX if ((user=fcbinit(*ambig,&fcb)) == -1) continue; /* Bogus file name */
- XX setusr(user);
- XX for (pos = bdos(FNDFRST,&fcb); pos != 0xff; pos = bdos(FNDNEXT,&fcb)) {
- XX if ((last = (struct DIRLIST *)malloc(sizeof(struct DIRLIST)))
- XX && (last->fnam=malloc(18))) {
- XX dma[pos].f_driv=fcb.f_driv; /* set drive */
- XX if (!first) first = last; else prev->next = last;
- XX fcb2str(last->fnam,&dma[pos],user);
- XX last->next = NULL;
- XX prev = last;
- XX } else mess(5); /* No more room */
- XX } /* for */
- XX ambig++;
- XX } /* while */
- XX rstusr();
- XX return(first);
- XX} /* expwildcard */
- XX#endif
- XX
- XX
- XX#ifdef __MSDOS__
- XX/*
- XX| Abs: Return list of malloc'ed filenames matching ambigious input list.
- XX| Ret: Pointer to alloced list, or 0 if none found.
- XX| Imp: System dependent: MS-DOS 2.0, 3.2.
- XX*/
- XXstruct DIRLIST *expwildcard(ambig)
- XXchar **ambig;
- XX{
- XX union REGS ireg;
- XX union REGS oreg;
- XX struct SREGS sreg;
- XX struct DTA dta;
- XX
- XX char name[64];
- XX char *endpath;
- XX int lenpath;
- XX struct DIRLIST *first, *last, *prev;
- XX
- XX if (!*ambig) return(NULL); /* Doing stdin */
- XX
- XX ireg.h.ah = SETDTA;
- XX ireg.x.dx = (int)&dta;
- XX intdos(&ireg,&oreg);
- XX first = NULL;
- XX
- XX while (*ambig) {
- XX endpath = strrchr(*ambig,DIRCHAR);
- XX if (endpath) {
- XX endpath++; /* Behind "\" */
- XX lenpath = (unsigned int)endpath - (unsigned int)*ambig;
- XX } else lenpath = 0;
- XX ireg.h.ah = GETFRST;
- XX ireg.x.cx = _A_NORMAL; /* Look up all normal files. */
- XX ireg.x.dx = (int)*ambig;
- XX for (;;) {
- XX intdos(&ireg,&oreg);
- XX /* printf("AX = 0x%x CF = 0x%x\n",oreg.x.ax,oreg.x.cflag); */
- XX if (oreg.x.cflag) break;
- XX if ((last = (struct DIRLIST *)malloc(sizeof(struct DIRLIST)))
- XX && (last->fnam = (char *)malloc(strlen(dta.fname)+lenpath+1))) {
- XX if (!first) first = last; else prev->next = last;
- XX strncpy(last->fnam,*ambig,lenpath);
- XX last->fnam[lenpath] = '\0';
- XX strcat(last->fnam,dta.fname);
- XX last->next = NULL;
- XX prev = last;
- XX ireg.h.ah = GETNEXT;
- XX } else mess(5); /* No more room */
- XX } /* for */
- XX ambig++;
- XX } /* while */
- XX return(first);
- XX} /* expwildcard */
- XX#endif
- XX
- XX
- XX/*
- XX| Abs: Dispose list of malloc'ed filenames.
- XX*/
- XXvoid dispwildcard(first)
- XXstruct DIRLIST *first;
- XX{
- XX struct DIRLIST *last, *prev;
- XX
- XX last = first;
- XX while (last)
- XX {
- XX prev = last;
- XX free(last->fnam);
- XX last = last->next;
- XX free(prev);
- XX }
- XX} /* dispwildcard */
- XX#endif
- XX
- XX/* EOF */
- SHAR_EOF
- if test 6483 -ne "`wc -c bdmg.c`"
- then
- echo shar: error transmitting bdmg.c '(should have been 6483 characters)'
- fi
- echo shar: extracting plain.c
- sed 's/^XX//' << \SHAR_EOF > plain.c
- XX/* plain.c 1989 december 10 [gh]
- XX+-----------------------------------------------------------------------------
- XX| Abstract:
- XX| Plain filter module
- XX|
- XX| Authorship:
- XX| Copyright (c) 1988, 1989 Gisle Hannemyr.
- XX| Permission is granted to hack, make and distribute copies of this module
- XX| as long as this notice and the copyright notices are not removed.
- XX| If you intend to distribute changed versions of this module, please make
- XX| an entry in the "history" log (below) and mark the hacked lines with your
- XX| initials. I maintain the module, and shall appreiciate copies of bug
- XX| fixes and new versions.
- XX| Flames, bug reports, comments and improvements to:
- XX| snail: Gisle Hannemyr, Brageveien 3A, 0452 Oslo, Norway
- XX| email: X400: gisle@nr.uninett
- XX| RFC: gisle@ifi.uio.no
- XX| (and several BBS mailboxes in the Oslo area).
- XX|
- XX| Access programs:
- XX| void inittable() : Initialize default transformation table.
- XX| void readtable() : Initialize transformation table from file.
- XX| void doplain() : Interprete one file.
- XX|
- XX| History:
- XX| 11 dec 89 [gh] Latest update.
- XX|
- XX| See main module for more comments.
- XX+---------------------------------------------------------------------------*/
- XX
- XX#include <stdio.h>
- XX#include "pep.h"
- XX#include <ctype.h>
- XX#include <string.h>
- XX
- XX/*---( defines )------------------------------------------------------------*/
- XX
- XX#define WSHH 0x1e /* WordStar invisible soft hyphen. */
- XX#define WSSH 0x1f /* WordStar visible soft hyphen. */
- XX#define WSSC 0x8d /* WordStar soft carrige return. */
- XX#define WSSS 0xa0 /* WordStar soft space. */
- XX
- XX#ifndef BUFSIZE
- XX#define BUFSIZE 8192
- XX#endif /* BUFSIZE */
- XX
- XX
- XX/*---( types )--------------------------------------------------------------*/
- XX
- XXtypedef int FOLDMATRIX[11][2];
- XX
- XX
- XX/*---( constants )----------------------------------------------------------*/
- XX
- XX/* Test for Swedish characters too, but after the Norwegian ones. */
- XXstatic FOLDMATRIX decfold = {
- XX { 198, 91 }, /* AE [ (N) */
- XX { 216, 92 }, /* OE \ (N) */
- XX { 197, 93 }, /* AA ] (-) */
- XX { 230, 123 }, /* ae { (N) */
- XX { 248, 124 }, /* oe | (N) */
- XX { 229, 125 }, /* aa } (-) */
- XX { 196, 91 }, /* AE [ (S) */
- XX { 214, 92 }, /* OE \ (S) */
- XX { 228, 123 }, /* ae { (S) */
- XX { 246, 124 }, /* oe | (S) */
- XX { 0, 0 }
- XX};
- XX
- XX
- XXstatic FOLDMATRIX ibmfold = {
- XX { 146, 91 }, /* AE [ (N) */
- XX { 157, 92 }, /* OE \ (N) */
- XX { 143, 93 }, /* AA ] (-) */
- XX { 145, 123 }, /* ae { (N) */
- XX { 155, 124 }, /* oe | (N) */
- XX { 134, 125 }, /* aa } (-) */
- XX { 142, 91 }, /* AE [ (S) */
- XX { 153, 92 }, /* OE \ (S) */
- XX { 132, 123 }, /* ae { (S) */
- XX { 148, 124 }, /* oe | (S) */
- XX { 0, 0 }
- XX};
- XX
- XX
- XXstatic FOLDMATRIX macfold = {
- XX { 174, 91 }, /* AE [ (N) */
- XX { 175, 92 }, /* OE \ (N) */
- XX { 129, 93 }, /* AA ] (-) */
- XX { 190, 123 }, /* ae { (N) */
- XX { 191, 124 }, /* oe | (N) */
- XX { 140, 125 }, /* aa } (-) */
- XX { 128, 91 }, /* AE [ (S) */
- XX { 133, 92 }, /* OE \ (S) */
- XX { 138, 123 }, /* ae { (S) */
- XX { 154, 124 }, /* oe | (S) */
- XX { 0, 0 }
- XX};
- XX
- XX
- XX/*---( variables )----------------------------------------------------------*/
- XX
- XXstatic unsigned char Buffer[BUFSIZE]; /* Output buffer */
- XXstatic unsigned char CTable[256]; /* General fold matrix */
- XX
- XXstatic int BuffSs = 0; /* Bona-fide chars. in string. */
- XXstatic int BuffXx = 0; /* Horisontal pos. in buffer. */
- XXstatic int NSpace = 0; /* No. of spaces not flushed. */
- XX
- XX
- XX/*---( forward )------------------------------------------------------------*/
- XX
- XXchar *getenv();
- XX
- XX
- XX/*---( housekeeping )-------------------------------------------------------*/
- XX
- XX/*
- XX| Abs: Is it a control character? (According to pep's rather complicated
- XX| concept of such.)
- XX| Ret: TRUE if it is, else FALSE (pep hacks ctrl. chars, leave others alone).
- XX*/
- XXstatic BOOL ctrlp(cc)
- XXint cc;
- XX{
- XX if (isascii(cc)) {
- XX if (wflag1 && (cc == WSSH)) return(FALSE);
- XX if (iscntrl(cc)) return(TRUE); else return(FALSE);
- XX } else if (!bflagb) return(FALSE);
- XX /* Assert: if it was 7 bit ASCII, or if the upper 128 set shall be */
- XX /* considered legal character, then we have returned by now. */
- XX
- XX if (wflag1 && (cc == WSSC)) return(FALSE);
- XX /* Assert: if it was WordStar soft CR, then we have returned by now. */
- XX
- XX if (iflagi && IFrst) { /* We are folding to IBM charset, */
- XX int jj = 0;
- XX while (ibmfold[jj][0] && (ibmfold[jj][0] != cc)) jj++;
- XX return(!ibmfold[jj][0]); /* so those are not control chars. */
- XX }
- XX return(TRUE);
- XX /* If all else fails, it must be a control character. */
- XX} /* ctrlp */
- XX
- XX
- XX/*---( transformation table )-----------------------------------------------*/
- XX
- XX/*
- XX| Abs: Catenate tabledir and cname to create a full searchpath.
- XX| Ret: Pointer to the full, catenated path.
- XX*/
- XXstatic char *findpath(tabledir,cname)
- XXchar *tabledir, *cname;
- XX{
- XX char fullpath[1024], *ss;
- XX
- XX if (!tabledir) return(cname); /* Bail out under VMS, etc. */
- XX ss = fullpath;
- XX while (*ss++ = *tabledir++) ; /* strcpy(fullpath,tabledir); */
- XX ss--; /* ss points to terminator */
- XX if (ss[-1] != DIRCHAR) { *ss = DIRCHAR; *++ss = '\0'; }
- XX while (*ss++ = *cname++) ; /* strcat(fullpath,cname); */
- XX return(fullpath);
- XX} /* findpath */
- XX
- XX/*
- XX| Abs: Initialize default transformation table.
- XX*/
- XXvoid inittable()
- XX{
- XX int cc;
- XX
- XX for (cc = 0; cc < 256; cc++) CTable[cc] = cc;
- XX} /* inittable */
- XX
- XX
- XX/*
- XX| Abs: Initialize transformation table from file.
- XX| Par: tabledir = pointer to table to initialize
- XX| cname = file to read table from
- XX| echo = TRUE to echo comments to stderr, else quiet.
- XX*/
- XXvoid readtable(tabledir,cname,echo)
- XXchar *tabledir, *cname;
- XXBOOL echo;
- XX{
- XX FILE *fdt;
- XX char *ss;
- XX
- XX if ((fdt = fopen(cname,"r")) == NULL) {
- XX if (tabledir) {
- XX if (ss = strrchr(tabledir,DIRCHAR)) {
- XX *++ss = '\0';
- XX fdt = fopen(findpath(tabledir,cname),"r");
- XX } /* if tabledir made sense */
- XX } /* if tabledir defined */
- XX if (fdt == NULL) {
- XX#ifndef __CPM86__
- XX if (tabledir = getenv("PEP"))
- XX fdt = fopen(findpath(tabledir,cname),"r");
- XX#endif
- XX if (fdt == NULL) {
- XX fprintf(stderr,"can't open translation table \"%s\"\n", cname);
- XX exit(ERROR_EXIT);
- XX } /* if file not found in environment directory */
- XX } /* if file not found in startup directory */
- XX } /* if file not found in local directory */
- XX
- XX while (fgets(Buffer,BUFSIZE-1,fdt)) {
- XX char *ss;
- XX int ii;
- XX if (ss = strchr(Buffer,'#')) {
- XX if (echo && (ss[1] != '#')) {
- XX fputs(" ",stderr);
- XX fputs(ss,stderr);
- XX }
- XX *ss = '\0';
- XX } /* if comment */
- XX for (ii = strlen(Buffer) - 1; isspace(Buffer[ii]) && (ii >= 0); ii--);
- XX Buffer[++ii] = 0;
- XX if (*Buffer) {
- XX int tt, ff;
- XX if (sscanf(Buffer,"%d %d",&ff,&tt) != 2) mess(6);
- XX if ((tt < 0) || (tt > 255) || (ff < 0) || (ff > 255)) mess(6);
- XX /* fprintf(stderr,"[%s] %d <== %d\n",Buffer,tt,ff); */
- XX CTable[ff] = tt;
- XX }
- XX } /* while */
- XX fclose(fdt);
- XX} /* readtable */
- XX
- XX
- XX/*---( foldings )-----------------------------------------------------------*/
- XX
- XX/*
- XX| Abs:
- XX*/
- XXstatic unsigned char fold8(cc,fold)
- XXint cc;
- XXFOLDMATRIX fold;
- XX{
- XX if (cc >= ILimit) {
- XX int jj = 0;
- XX while (fold[jj][IFrst] && (fold[jj][IFrst] != cc)) jj++;
- XX if (fold[jj][IFrst]) cc = fold[jj][ILast];
- XX }
- XX return(cc);
- XX} /* fold8 */
- XX
- XX
- XX/*
- XX| Abs: Flush accumulated whitespace, compressing spaces into tabs.
- XX*/
- XXstatic void flushspace()
- XX{
- XX int ii;
- XX
- XX if (cflagc && OTabSz) {
- XX while (NSpace > 1 && NSpace >= (ii = OTabSz - (LineXx % OTabSz))) {
- XX Buffer[BuffXx++] = '\t';
- XX NSpace -= ii;
- XX LineXx += ii;
- XX } /* while */
- XX } /* if compressing tabs */
- XX LineXx += NSpace;
- XX while (NSpace--) Buffer[BuffXx++] = ' ';
- XX NSpace = 0;
- XX} /* flushspace */
- XX
- XX
- XX/*
- XX| Abs: Flush line in buffer to the output file.
- XX| Des: Turbo-C return bogus values if isspace is called with arg > 128.
- XX| Sef: Zero NSpace, BuffXx and LineXx counts.
- XX*/
- XXstatic void flushline()
- XX{
- XX if (!sflags || (BuffSs >= StrSiz)) {
- XX while (!(Buffer[BuffXx-1] & 0x80) && isspace(Buffer[BuffXx-1]) && BuffXx)
- XX BuffXx--;
- XX Buffer[BuffXx] = '\0';
- XX if (wflag1) {
- XX int xx;
- XX if (BuffXx && (Buffer[BuffXx-1] == '-')) Buffer[BuffXx-1] = WSSH;
- XX xx = 0;
- XX while (Buffer[xx]) {
- XX if (Buffer[xx] == ' ') Buffer[xx] = WSSS;
- XX xx++;
- XX }
- XX }
- XX fputs(Buffer,Fdo);
- XX
- XX if (vflagv) /* Paragraph only */ ;
- XX
- XX /* Terminate the line we have just flushed */
- XX if (wflag1) {
- XX if (BuffXx) putc(WSSC,Fdo); else putc('\r',Fdo);
- XX putc('\n',Fdo);
- XX } else {
- XX if ((vflagv && BuffXx) || (EndOLn == -2)) putc(' ',Fdo);
- XX else {
- XX if (EndOLn == -1) { putc('\r',Fdo); putc('\n',Fdo); }
- XX else putc(EndOLn,Fdo);
- XX } /* if */
- XX } /* if */
- XX showprogress();
- XX } /* if enough of a string to print it */
- XX NSpace = BuffXx = LineXx = 0;
- XX} /* flushline */
- XX
- XX
- XX/*
- XX| Abs: Put character into line buffer.
- XX| Des: First, make some simple character foldings. Then, put the character
- XX| into a line buffer. A control character may be converted to hex,
- XX| surrounded by angle brackets.
- XX*/
- XXstatic void putline(cc)
- XXint cc;
- XX{
- XX static BOOL wasbs = FALSE;
- XX static BOOL wascr = FALSE;
- XX static BOOL wasoe = FALSE;
- XX BOOL isaoe = FALSE;
- XX
- XX if (BuffXx >= (BUFSIZE-5)) flushline(); /* Panic! */
- XX if (zflagz) cc = cc & 0x7f; /* Fold to 7 bit. */
- XX if (mflagm && !IFrst && (cc == '\r')) cc = '\n'; /* Mac uses CR as terminator */
- XX /* This is a hack to fool the stuff below who removes redundant CR's. */
- XX /* When we are converting from Mac format, we want to keep them all. */
- XX
- XX if (wasoe) {
- XX wasoe = FALSE;
- XX if (cc != 92) {
- XX Buffer[BuffXx] = '\\';
- XX LineXx++;
- XX BuffXx++;
- XX } /* if */
- XX } else if ((cc == 92) && kflagk && IFrst) { wasoe++; return; }
- XX
- XX if (dflagd) { if (!IFrst && (cc == 216)) isaoe++; cc = fold8(cc,decfold); }
- XX if (iflagi) { if (!IFrst && (cc == 157)) isaoe++; cc = fold8(cc,ibmfold); }
- XX if (mflagm) { if (!IFrst && (cc == 175)) isaoe++; cc = fold8(cc,macfold); }
- XX if (gflagg) cc = CTable[cc]; /* Fold from table. */
- XX if (wflag0) {
- XX if (cc == WSHH) return; /* WS invisible soft hyphen. */
- XX if (cc == WSSH) cc = '-'; /* WS visible soft hyphen. */
- XX }
- XX
- XX if (wascr) {
- XX wascr = FALSE;
- XX if (BuffXx) {
- XX flushline();
- XX if (cc == '\n') return;
- XX } /* if anything in buffer */
- XX } /* if wascr */
- XX
- XX if ((cc == '\b') && BuffXx) { BuffXx--; wasbs++; }
- XX else if (cc == '\f') {
- XX if (BuffXx) flushline();
- XX if (wflag1) fputs(".PA\n",Fdo);
- XX else if (!(bflagb + sflags)) putc('\f',Fdo);
- XX wasbs = FALSE;
- XX }
- XX else if (cc == '\n') { flushline(); BuffSs++; }
- XX else if (cc == '\r') { wascr++; }
- XX else if (cc == '\t') {
- XX if (tflagt || cflagc) NSpace += ITabSz - ((LineXx + NSpace) % ITabSz);
- XX else { Buffer[BuffXx++] = cc; LineXx++; }
- XX BuffSs++;
- XX wasbs = FALSE;
- XX }
- XX else if (ctrlp(cc)) {
- XX if (xflagx) { /* Expanding control chars. */
- XX char *ss;
- XX if (NSpace) flushspace();
- XX ss = (char *)&Buffer[BuffXx];
- XX sprintf(ss,"<%02xh>",cc);
- XX BuffXx += 5;
- XX LineXx += 5;
- XX }
- XX else if (BuffXx) flushline(); /* Removing control chars. */
- XX BuffSs = 0;
- XX wasbs = FALSE;
- XX }
- XX else if (cflagc && cc == ' ') NSpace++;
- XX else {
- XX if (NSpace) flushspace();
- XX if (!wasbs || (cc != '_')) Buffer[BuffXx] = cc;
- XX LineXx++;
- XX BuffXx++;
- XX if (kflagk && isaoe) {
- XX Buffer[BuffXx] = cc;
- XX LineXx++;
- XX BuffXx++;
- XX }
- XX BuffSs++;
- XX wasbs = FALSE;
- XX }
- XX} /* putline */
- XX
- XX
- XX/*---( file loop )----------------------------------------------------------*/
- XX
- XX/*
- XX| Abs: Read (and write) one complete plain file.
- XX*/
- XXvoid doplain()
- XX{
- XX int cc;
- XX
- XX while ((cc = getc(Fdi)) != EOF) putline(cc);
- XX if (BuffXx) flushline();
- XX} /* doplain */
- XX
- XX/* EOF */
- SHAR_EOF
- if test 12521 -ne "`wc -c plain.c`"
- then
- echo shar: error transmitting plain.c '(should have been 12521 characters)'
- fi
- echo shar: extracting pep.h
- sed 's/^XX//' << \SHAR_EOF > pep.h
- XX/* pep.h 1989 june 27 [gh]
- XX+-----------------------------------------------------------------------------
- XX| Abstract:
- XX| Common types and definitions for pep.
- XX|
- XX| History:
- XX| 27 jun 89 [gh] Latest update.
- XX|
- XX| See main module for more comments.
- XX+---------------------------------------------------------------------------*/
- XX
- XX/* These 4 symbols may be (un)set by you according preferences/environment */
- XX
- XX/* STRICMP should be defined if "stricmp" reported missing by the linker */
- XX/* SYSV2 should be defined if you are compiling this on SYS V.2 UNIX */
- XX/* __TURBOC__ are already set to 1 by Borland, (may be undefined by you). */
- XX/* VMSV1 should be defined if you are using VAX C ver. 1.x VMS */
- XX
- XX
- XX/* Canonize macroes predefined by the compiler. */
- XX
- XX#ifdef MSDOS
- XX#define __MSDOS__ 1
- XX#endif
- XX
- XX#ifdef msdos
- XX#define __MSDOS__ 1
- XX#endif
- XX
- XX#ifdef unix
- XX#define __UNIX__ 1
- XX#endif
- XX
- XX#ifdef vms
- XX#define __VMS__ 1
- XX#endif
- XX
- XX
- XX/*---( defines )------------------------------------------------------------*/
- XX
- XX#ifdef __VMS__
- XX#include <ssdef.h>
- XX#endif
- XX
- XX#define FALSE 0 /* Boolean FALSE */
- XX#define TRUE !FALSE /* Boolean TRUE */
- XX
- XX
- XX#ifdef __CPM86__
- XX#define SETDTA 0x1A /* Set Disk Transfer Address */
- XX#define FNDFRST 0x11 /* Find first FCB */
- XX#define FNDNEXT 0x12 /* Find next FCB */
- XX#define DIRCHAR 0xFF /* Bogus */
- XX#endif
- XX
- XX#ifdef __MSDOS__
- XX#define SETDTA 0x1A /* Set Disk Transfer Address */
- XX#define GETFRST 0x4E /* Find first ASCIZ */
- XX#define GETNEXT 0x4F /* Find next ASCIZ */
- XX#define DIRCHAR '\\' /* Directory path separator */
- XX#endif
- XX
- XX#ifdef __UNIX__
- XX#define DIRCHAR '/' /* Directory path separator */
- XX#endif
- XX
- XX#ifdef __VMS__
- XX#define unlink(x) delete(x)
- XX#define DIRCHAR '>' /* Directory path separator */
- XX#endif
- XX
- XX#ifdef __VMS__
- XX#define NORML_EXIT SS$_NORMAL
- XX#define ERROR_EXIT SS$_ABORT
- XX#else
- XX#define NORML_EXIT 0
- XX#define ERROR_EXIT 1
- XX#endif
- XX
- XX
- XX/*---( types )--------------------------------------------------------------*/
- XX
- XXtypedef unsigned char BOOL;
- XX
- XX
- XX/*---( variables )----------------------------------------------------------*/
- XX
- XX#ifdef MAIN
- XX#define EXTERN
- XX#else
- XX#define EXTERN extern
- XX#endif
- XX
- XXEXTERN FILE *Fdi;
- XXEXTERN FILE *Fdo;
- XXEXTERN int IFrst, ILast, ILimit; /* Fold direction flags */
- XX
- XX#ifndef MAIN
- XXextern long LCount; /* Global line count */
- XXextern int LineXx; /* Horisontal position on line. */
- XXextern int ITabSz; /* Input tabulator size. */
- XXextern int OTabSz; /* Output tabulator size. */
- XXextern int StrSiz; /* String size for strings. */
- XXextern int EndOLn; /* -1 CRLF, -2 Paragraph only */
- XX
- XXextern int bflagb; /* Binary wash. */
- XXextern int cflagc; /* Compress */
- XXextern int dflagd; /* DEC character set. */
- XXextern int gflagg; /* General fold table */
- XXextern int iflagi; /* IBM character set. */
- XXextern int kflagk; /* Kman character set. */
- XXextern int mflagm; /* MAC character set. */
- XXextern int sflags; /* String extraction. */
- XXextern int tflagt; /* Tab expansion */
- XXextern int vflagv; /* Terminate only paragraphs. */
- XXextern int wflag0; /* From WS doc. mode to 7-bit. */
- XXextern int wflag1; /* From 7-bit to WS doc. mode. */
- XXextern int xflagx;
- XXextern int zflagz;
- XX#endif
- XX
- XX/* EOH */
- SHAR_EOF
- if test 3745 -ne "`wc -c pep.h`"
- then
- echo shar: error transmitting pep.h '(should have been 3745 characters)'
- fi
- echo shar: extracting bdmg.h
- sed 's/^XX//' << \SHAR_EOF > bdmg.h
- XX/* bdmg.h 1989 december 11 [gh]
- XX+-----------------------------------------------------------------------------
- XX| Abstract:
- XX| CP/M and DOS types and functions exported by bdmg.c
- XX|
- XX| History:
- XX| 11 dec 89 [gh] Latest update.
- XX|
- XX| See main module for more comments.
- XX+---------------------------------------------------------------------------*/
- XX
- XX/*---( types )--------------------------------------------------------------*/
- XX
- XXstruct DIRLIST {
- XX char *fnam;
- XX struct DIRLIST *next;
- XX}; /* DIRLIST */
- XX
- XX
- XX/*---( prototypes )---------------------------------------------------------*/
- XX
- XXstruct DIRLIST *expwildcard();
- XXvoid dispwildcard();
- XX
- XX
- XX/* EOH */
- XX
- SHAR_EOF
- if test 659 -ne "`wc -c bdmg.h`"
- then
- echo shar: error transmitting bdmg.h '(should have been 659 characters)'
- fi
- # End of shell archive
- exit 0
-
-